import 'classtest/ClassA.dart';

void main() {
  //1、类默认有一个无参构造函数
  Class01 class01_1 = Class01();
  Class01 class01_2 = new Class01(); //dart2.0后，new可省略
  //2、Check whether two references are to the same object
  print(identical(class01_1, class01_2));
  //3、the runtime type of the object
  print('The type of a is ${class01_1.runtimeType}');
  //4、使用点(.)调用实例变量或方法
  class01_1.name = 'jack';
  class01_1.age = 18;
  class01_1.fun01();
  //5、使用级联操作符(..)连续调用
  class01_2
    ..name = 'lucy'
    ..age = 20
    ..fun01()
    ..fun02();
  //6、用下划线(_)标识某个变量或方法为私有
  ClassA classA = new ClassA();
  classA
//    .._name = 'lily'
    ..age = 20
//    .._fun01()
    ..fun02();
  //7、getter、setter，Dart对于每一个变量是有隐式get、set方法的，但是对于final变量是没有的
  Class01 class01_3 = Class01();
  class01_3.name = 'lilei';
  //8、也可以通过get、set关键字，定义一些自己的get、set,调用的时候不需要()，如下：普通方法和get、set的区别
  class01_3.fun01();
  String queryName = class01_3.queryName;
  print('queryName is $queryName');
  class01_3.setName = 'hanmeimei';
  print('queryName is ${class01_3.queryName}');
}

class Class01 {
  String name;
  int age;

  void fun01() {
    print('my name is $name');
  }

  void fun02() {
    print('my age is $age');
  }

  String get queryName => name;

  set setName(String value) => this.name = value;
}
